home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ospf_detect.nasl < prev    next >
Text File  |  2005-03-31  |  5KB  |  144 lines

  1. # This plugin was written by Michel Arboi <arboi@alussinan.org>
  2. # It is released under the GNU Public Licence (GPLv2)
  3. # RFC 1247 / RFC 2328 (OSPF v2)
  4. # The OSPF protocol runs directly over IP, using IP protocol 89.
  5. # Routing protocol packets should always be sent with the IP TOS field set
  6. # to 0.
  7. #
  8. # Table 8: OSPF packet types.
  9. #    1      Hello                  Discover/maintain  neighbors             
  10. #    2      Database Description   Summarize database contents              
  11. #    3      Link State Request     Database download                        
  12. #    4      Link State Update      Database update                          
  13. #    5      Link State Ack         Flooding acknowledgment
  14. #
  15.  
  16. if(description)
  17. {
  18.   script_id(11906);
  19.   script_version ("$Revision: 1.4 $");
  20.  
  21.   name["english"] = "OSPF detection";
  22.   script_name(english:name["english"]);
  23.  
  24.   desc["english"] = "
  25. This plugin detects OSPF agents.
  26.  
  27. Risk factor : Low";
  28.  
  29.   script_description(english:desc["english"]);
  30.  
  31.   summary["english"] = "Listen to OSPF packets";
  32.   script_summary(english:summary["english"]);
  33.   script_category(ACT_GATHER_INFO); 
  34.   script_copyright(english:"This script is Copyright (C) 2003 Michel Arboi");
  35.   script_family(english:"Service detection");
  36.   exit(0);
  37. }
  38.  
  39. ##include("dump.inc");
  40.  
  41. if ( islocalhost() ) exit(0);
  42.  
  43. if (! defined_func("join_multicast_group")) exit(0);
  44.  
  45. join_multicast_group("224.0.0.5");    # AllSPFRouters
  46. join_multicast_group("224.0.0.6");    # AllDRouters
  47. # join_multicast_group is necessary, because pcap_next does not put the 
  48. # interface in promiscuous mode
  49.  
  50. function on_exit()
  51. {
  52.   leave_multicast_group("224.0.0.5");
  53.   leave_multicast_group("224.0.0.6");
  54. }
  55.  
  56. function extract_ip_addr(pkt, off)
  57. {
  58.   # This avoids a dirty warning, but there is definitely a problem somewhere
  59.   # Why do I receive short OSPF Hello packets?
  60.   if (off + 4 > strlen(pkt))
  61.     return '0.0.0.0';
  62.  
  63.   return
  64.     strcat(    ord(pkt[off+0]), ".", 
  65.         ord(pkt[off+1]), ".", 
  66.         ord(pkt[off+2]), ".", 
  67.         ord(pkt[off+3]));
  68. }
  69.  
  70. f = "ip proto 89 and src " + get_host_ip();
  71. p = pcap_next(pcap_filter: f, timeout: 15);
  72. if (isnull(p)) exit(0);
  73.  
  74. ##dump(ddata: p, dtitle: "IP");
  75.  
  76. hl = ord(p[0]) & 0xF; hl *= 4;
  77. ospf = substr(p, hl);
  78.  
  79. ##dump(ddata: ospf, dtitle: "OSPF");
  80.  
  81. head = substr(ospf, 0, 24);
  82. data = substr(ospf, 24);
  83.  
  84. # OSPH header
  85. #    0                   1                   2                   3
  86. #    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  87. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  88. #   |   Version #   |     Type      |         Packet length         |
  89. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  90. #   |                          Router ID                            |
  91. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  92. #   |                           Area ID                             |
  93. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  94. #   |           Checksum            |             AuType            |
  95. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  96. #   |                       Authentication                          |
  97. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  98. #   |                       Authentication                          |
  99. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  100. #
  101.  
  102. ver = ord(head[0]);
  103. type = ord(head[1]);
  104. len = ord(head[2]) * 256 + ord(head[3]);
  105. rep = strcat('\nAn OSPF v', ver, ' agent is running on this host.\n');
  106.  
  107.  
  108. # OSPF Hello packet
  109. #    0                   1                   2                   3
  110. #    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  111. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  112. #   |                        Network Mask                           |
  113. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  114. #   |         HelloInterval         |    Options    |    Rtr Pri    |
  115. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  116. #   |                     RouterDeadInterval                        |
  117. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  118. #   |                      Designated Router                        |
  119. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  120. #   |                   Backup Designated Router                    |
  121. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  122. #   |                          Neighbor                             |
  123. #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  124.  
  125. if (type == 1)
  126. {
  127.   mask = extract_ip_addr(pkt: data, off: 0);
  128.   rep += strcat('The netmask is ', mask, '\n');
  129.   dr = extract_ip_addr(pkt: data, off: 12);
  130.   if (dr != '0.0.0.0')
  131.     rep += strcat('The Designated Router is ', dr, '\n');
  132.   bdr = extract_ip_addr(pkt: data, off: 16);
  133.   if (bdr != '0.0.0.0')
  134.     rep += strcat('The Backup Designated Router is ', dr, '\n');
  135.   n = extract_ip_addr(pkt: data, off: 20);
  136.   if (n != '0.0.0.0')
  137.     rep += strcat('Neighbor ', n, ' has been seen\n');
  138. }
  139.  
  140. rep += '\nRisk factor : Low';
  141. security_note(port: 0, protocol: "ospf", data: rep);
  142.  
  143.